package com.panshi.controller.article;

import com.panshi.api.ArticleApi;
import com.panshi.api.UserApi;
import com.panshi.po.ArticlePo;
import com.panshi.po.UserPO;
import com.panshi.pagevo.PageBeanVo;
import com.panshi.vo.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.*;

@Controller
@Slf4j
@RequestMapping("/findArticle")
public class FindArticleController {

    @Resource
    private ArticleApi articleApi;

    @Resource
    private UserApi userApi;

    /**
     * 根据文章状态查询
     * @param pageBeanVo
     * @return
     */
    @RequestMapping("/all")
    @ResponseBody
    public ResponseVO findAll(PageBeanVo pageBeanVo){
        log.info("+++++++++++++++++++ 查询所有文章+++++ pageBeanVo:{}",pageBeanVo);
        ResponseVO<List<ArticlePo>> vo = articleApi.queryAll(pageBeanVo);
        log.info("查询出来的数据-------------------vo:{}",vo);
        List<ArticlePo> list =  vo.getData();
        return vo;
    }

    /**
     * 根据文章编号进行查询
     * @param articleNumberQueryVo
     * @return
     */
    @RequestMapping("/number")
    @ResponseBody
    public ResponseVO findByNumber(ArticleNumberQueryVo articleNumberQueryVo){
        log.info("+++++++++++++++++++根据文章编号进行模糊查询 +++++ articleNumberQueryVo:{}",articleNumberQueryVo);
        ResponseVO vo ;
        vo = articleApi.numberQuery(articleNumberQueryVo);
        log.info("数据-------------------vo:{}",vo);
        return vo;
    }

    /**
     * 根据文章标题进行模糊查询
     * @param articleTitleQueryVo
     * @return
     */
    @RequestMapping("/title")
    @ResponseBody
    public ResponseVO show(ArticleTitleQueryVo articleTitleQueryVo){
        log.info("+++++++++++++++++++根据文章标题进行模糊查询 +++++ articleTitleQueryVo:{}",articleTitleQueryVo);
        ResponseVO vo ;
        //ResponseVO vo = articleApi.queryAll(pageBean);
        vo = articleApi.titleQuery(articleTitleQueryVo);
        log.info("数据-------------------vo:{}",vo);
        return vo;
    }

    /**
     * 根据文章状态查询
     * @param articleStateQueryVo
     * @return
     */
    @RequestMapping("/state")
    @ResponseBody
    public ResponseVO stateFind(ArticleStateQueryVo articleStateQueryVo){
        log.info("+++++++++++++++++++ 根据状态查询+++++ articleStateQueryVo:{}",articleStateQueryVo);
        ResponseVO vo = articleApi.stateQuery(articleStateQueryVo);
        log.info("查询出来的数据-------------------vo:{}",vo);
        return vo;
    }

    /**
     * 根据最新排序查询数据，下架的除外
     * @param pageBeanVo
     * @return
     */
    @RequestMapping("/newsTime")
    @ResponseBody
    public ResponseVO findByCreate(PageBeanVo pageBeanVo){
        log.info("+++++++++++++++++++ 根据最新排序查询数据+++++ pageBeanVo:{}",pageBeanVo);
        ResponseVO vo = articleApi.timeLimtQuery(pageBeanVo);
        log.info("查询出来的数据-------------------vo:{}",vo);
        return vo;
    }

    /**
     * 查询所有数据，下架的除外
     * @param pageBeanVo
     * @return
     */
    @RequestMapping("/findAll")
    @ResponseBody
    public ResponseVO findByAll(PageBeanVo pageBeanVo){
        log.info("+++++++++++++++++++ 查询所有数据+++++ pageBeanVo:{}",pageBeanVo);
        ResponseVO vo = articleApi.soldQuery(pageBeanVo);
        log.info("查询出来的数据-------------------vo:{}",vo);
        return vo;
    }

    /**
     * 根据阅读量排序查询数据，下架的除外
     * @param pageBeanVo
     * @return
     */
    @RequestMapping("/findRead")
    @ResponseBody
    public ModelAndView findByRead(PageBeanVo pageBeanVo){
        log.info("根据阅读量排序查询数据+++++ pageBeanVo:{}",pageBeanVo);
        ResponseVO vo = articleApi.pvLimitQuery(pageBeanVo);
        log.info("查询出来的数据-------------------vo:{}",vo);
        return new ModelAndView("article/information_data");
    }

    @PostMapping("/info")
    public ModelAndView find(Integer currentPage){
        ModelAndView mv = new ModelAndView("article/information_data");

        if(null == currentPage){
            currentPage = 1;
        }
        //获取所有数据，下架的除外
        PageBeanVo pageBeanVo = new PageBeanVo();
        pageBeanVo.setCurrentPage(currentPage);
        pageBeanVo.setPageSize(8);
        ResponseVO<List<ArticlePo>> vo = articleApi.soldQuery(pageBeanVo);

        List<InformationVO> list = new ArrayList<>();

        for (ArticlePo po: vo.getData()) {
            InformationVO invo = new InformationVO();
            BeanUtils.copyProperties(po,invo);
            //根据用户id获取用户信息
            ResponseVO<UserPO> user = userApi.findUserById(po.getUid());
            invo.setUser(user.getData());
            list.add(invo);
        }
        log.info("***************************list:{}",list);
        mv.addObject("list",list);
        return mv;
    }

}
